<--- %%NOBANNER%% --> _delmvar_.sas
 BackForward

/*-------------------<-- Start of Description-->---------------------\
| To delete a global macro variable;                                 |
|---------------------<-- End of Description-->----------------------|
|--------------------------------------------------------------------|
|------------<-- Start of Files or Arguments Needed-->---------------|
| Argument:                                                          |
|    macrovar: the name of the macro variable you want to delete;    |
| All global variables need to be delete, separated by a space;      |
|---------------<-- End of Files Arguments Needed-->-----------------|
|--------------------------------------------------------------------|
|------------------<-- Start of Files Created-->---------------------|
| Example:                                                           |
|     %global color_int hascolor;                                    |
|     %_delmvar_(color_int hascolor);                                |
| Usage:   %_delmvar_(macrovar);                                     |
\-------------------<-- End of Files Created-->---------------------*/
%macro _delmvar_/parmbuff;
/*--------------------------------------------\
| Author:   Duo Zhou;                         |
| Created:  9-28-2001 9:12pm;                 |
| Modified: 1-15-2002 9:32pm;                 |
| Purpose:  Delete a global Macro Variable;   |
\--------------------------------------------*/
%local _nvars_ _var_ _vars_ _mvars_ _mvar_ _uvars_ _tmplast_;
%let _nvars_=0; %let _tmplast_=&syslast;
%do %while(%length(%nrbquote(%qscan(%quote(&syspbuff), %eval(&_nvars_+1), %str( (),)))));
	%let _nvars_=%eval(&_nvars_+1);
	%let _var_=%qscan(%quote(&syspbuff), &_nvars_, %str( (),));
   %if &_nvars_ eq 1 %then %let _vars_="%upcase(%trim(&_var_))";
   %else %let _vars_=&_vars_, "%upcase(%trim(&_var_))";
%end;
proc sql noprint;
   select name into: _mvars_ separated by ','
   from sashelp.vmacro
   where scope='GLOBAL' and upcase(name) in (&_vars_);

   select name into: _uvars_ separated by '", "'
   from sashelp.vmacro
   where scope ne 'GLOBAL' and upcase(name) in (&_vars_);
quit;
%if (%length(&_mvars_) >1) %then %do;
	%let _nvars_=0; 
	%do %while(%length(%nrbquote(%qscan(%quote(&_mvars_), %eval(&_nvars_+1), %str(,)))));
		%let _nvars_=%eval(&_nvars_+1);
		%let _mvar_=%qscan(%quote(&_mvars_), &_nvars_, %str(,));
	   %put --> Note: System is deleting global macro variable "&_mvar_".;
      %symdel &_mvar_;
	%end;
%end;
%else %do;
   %put ==> Alert! Cannot find global macro variables &_vars_!;
%end;
%if (%length(&_uvars_)>2) %then %do;
   %put ==> Alert! System macro variables "&_uvars_" cannot be deleted!;
%end;
%let syslast=&_tmplast_;
%mend _delmvar_;